﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Text;
using System.Windows.Forms;
using csharp.rad.general;
using ComponentFactory.Krypton.Toolkit;

namespace csharp.rad.GOVhotel
{
    public partial class RelBlocoMes : KryptonForm
    {
        Database myDBase;
        ToolStripLabel[] titProd;
        DateTime datada = Convert.ToDateTime("01/" + DateTime.Today.ToString("MM/yyyy"));
        int nmMês = 3, ttC, qCol = 13, qtItens, qRow, ultRow;

        public RelBlocoMes(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            menuMêsAno.Text = datada.ToString("MMMM / yyyy");
            Font myFont = new Font("Tahoma", 8.25F, FontStyle.Bold);
            Produtos rolProd = new Produtos(myDBase);
            int dbRet = rolProd.ListaNome();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: RelBlocoMesListaProd" + "\n" + rolProd.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int ix = 0; ix < rolProd.Items.Count; ix++)
            {
                string descrProd = rolProd.Items[ix].Descrição.Trim();
                if (descrProd.Length > 22) descrProd = descrProd.Substring(0, 22);
                listaProdutos.Rows.Add(rolProd.Items[ix].Código.ToString(), descrProd);
            }
            listaProdutos.Sort(prodNome, ListSortDirection.Ascending);
            titProd = new ToolStripLabel[rolProd.Items.Count + 1];
            for (ttC = 0; ttC < rolProd.Items.Count; ttC++)
            {
                titProd[ttC] = new ToolStripLabel();
                titProd[ttC].AutoSize = false;
                titProd[ttC].Size = new Size(30, 150);
                titProd[ttC].Font = myFont;
                titProd[ttC].Text = listaProdutos.Rows[ttC].Cells[1].Value.ToString();
                titProd[ttC].Tag = listaProdutos.Rows[ttC].Cells[0].Value;
                titProd[ttC].TextAlign = ContentAlignment.BottomCenter;
                titProd[ttC].TextDirection = ToolStripTextDirection.Vertical270;
                titProd[ttC].DisplayStyle = ToolStripItemDisplayStyle.Text;
                titProd[ttC].Owner = toolTítulo;
                toolTítulo.Items.Add(titProd[ttC]);
                DataGridViewColumn coluna = (DataGridViewColumn)Column1.Clone();
                coluna.Name = "Coluna_" + ttC.ToString();
                listaCompa.Columns.Add(coluna);
            }
            Starta.Enabled = true;
        }

        private void menuMêsMenos_Click(object sender, EventArgs e)
        {
            datada = datada.AddMonths(-1);
            nmMês = nmMês - 1;
            if (nmMês == 0) menuMêsMenos.Enabled = false;
            menuMêsMais.Enabled = true;
            menuMêsAno.Text = datada.ToString("MMMM / yyyy");
            Starta.Enabled = true;
        }

        private void menuMêsMais_Click(object sender, EventArgs e)
        {
            datada = datada.AddMonths(1);
            nmMês = nmMês + 1;
            if (nmMês == 3) menuMêsMais.Enabled = false;
            menuMêsMenos.Enabled = true;
            menuMêsAno.Text = datada.ToString("MMMM / yyyy");
            Starta.Enabled = true;
        }

        private void Monta_Dados()
        {
            string[] nomeBloco = new string[] { "piscina", "bloco 1", "bloco 2",
                "bloco 3", "bloco 4", "bloco 5", "limpeza"};
            for (int blk = 0; blk < 7; blk++)
            {
                menuProgrBar.Value = menuProgrBar.Value + 5;
                if (menuProgrBar.Value >= 100) menuProgrBar.Value = 0;
                this.Refresh();
                listaCompa.Rows.Add("0", nomeBloco[blk],
                    "0", "0", "0", "0", "0", "0", "", "0", "0", "0", "");
                for (int cl = 0; cl < ttC; cl++)
                { listaCompa.Rows[blk].Cells[cl + 13].Value = "0"; }
                int[] qtAção = new int[7];
                Operações rolOpera = new Operações(myDBase);
                rolOpera.Bloco = blk;
                rolOpera.DataIni = datada;
                rolOpera.DataFim = datada.AddMonths(1);
                int dbRet = rolOpera.ListaBlocoAcum(qtAção);
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: RelBlocoMesLoadAções" + "\n" + rolOpera.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int aç = 1; aç < 7; aç++)
                {
                    menuProgrBar.Value = menuProgrBar.Value + 5;
                    if (menuProgrBar.Value >= 100) menuProgrBar.Value = 0;
                    listaCompa.Rows[blk].Cells[aç + 1].Value = qtAção[aç].ToString();
                    if (qtAção[aç] > 0) listaCompa.Rows[blk].Cells[0].Value = "1";
                }
                int[] qtRepo = new int[4];
                dbRet = rolOpera.ListaRepoMêsBloco(qtRepo);
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: RelBlocoMesLoadRepos" + "\n" + rolOpera.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int rp = 1; rp < 4; rp++)
                {
                    menuProgrBar.Value = menuProgrBar.Value + 5;
                    if (menuProgrBar.Value >= 100) menuProgrBar.Value = 0;
                    listaCompa.Rows[blk].Cells[rp + 8].Value = qtRepo[rp].ToString();
                    if (qtRepo[rp] > 0) listaCompa.Rows[blk].Cells[0].Value = "1";
                }
            }
            for (int pp = 0; pp < ttC ; pp++)  
            {
                menuProgrBar.Value = menuProgrBar.Value + 5;
                if (menuProgrBar.Value >= 100) menuProgrBar.Value = 0;
                int prd = pp + 13;
                Retiradas rolSaída = new Retiradas(myDBase);
                rolSaída.Produto = Convert.ToInt32(titProd[pp].Tag);
                rolSaída.DataIni = datada;
                rolSaída.DataFim = datada.AddMonths(1);
                int dbRet = rolSaída.ListaMêsBloco();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: RelBlocoMesListaRet" + "\n" + rolSaída.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int blk = 0; blk < rolSaída.Items.Count; blk++)
                {
                    menuProgrBar.Value = menuProgrBar.Value + 5;
                    if (menuProgrBar.Value >= 100) menuProgrBar.Value = 0;
                    int qRow =  rolSaída.Items[blk].Bloco;
                    listaCompa.Rows[qRow].Cells[prd].Value = rolSaída.Items[blk].Quantidade.ToString();
                    listaCompa.Rows[qRow].Cells[0].Value = "1";
                }
            }
            listaCompa.Rows.Add("", "TOTAL", "", "", "", "", "", "", "", "", "", "", "", "",
                "", "", "", "", "", "");
            ultRow = listaCompa.Rows.Count - 1;
            int soma, qCell;
            for (qCell = 2; qCell < 8; qCell++)
            {
                soma = 0;
                for (qRow = 0; qRow < ultRow; qRow++)
                {
                    soma = soma + Convert.ToInt32(listaCompa.Rows[qRow].Cells[qCell].Value);
                }
                listaCompa.Rows[ultRow].Cells[qCell].Value = soma.ToString("####0");
            }
            for (qCell = 9; qCell < 12; qCell++)
            {
                soma = 0;
                for (qRow = 0; qRow < ultRow; qRow++)
                {
                    soma = soma + Convert.ToInt32(listaCompa.Rows[qRow].Cells[qCell].Value);
                }
                listaCompa.Rows[ultRow].Cells[qCell].Value = soma.ToString("####0");
            }
            for (qCell = 13; qCell < listaCompa.Columns.Count; qCell++)
            {
                soma = 0;
                for (qRow = 0; qRow < ultRow; qRow++)
                {
                    soma = soma + Convert.ToInt32(listaCompa.Rows[qRow].Cells[qCell].Value);
                }
                listaCompa.Rows[ultRow].Cells[qCell].Value = soma.ToString("####0");
            }
            menuProgrBar.Visible = false;
            menuMêsMais.Visible = true;
            menuMêsMenos.Visible = true;
            menuPrint.Visible = true;
            listaCompa.FirstDisplayedScrollingRowIndex = 0;
        }

        private void cmdLeft_Click(object sender, EventArgs e)
        {
            for (int ix = 0; ix < 3; ix++)
            {
                titProd[qCol - 12].Visible = false;
                listaCompa.Columns[qCol + 1].Visible = false;
                if (qCol <= (ttC + 4))
                {
                    qCol = qCol + 1;
                }
                else
                {
                    cmdLeft.Enabled = false;
                    break;
                }
                cmdRight.Enabled = true;
            }
        }

        private void cmdRight_Click(object sender, EventArgs e)
        {
            for (int ix = 0; ix < 3; ix++)
            {
                titProd[qCol - 12].Visible = true;
                listaCompa.Columns[qCol + 1].Visible = true;
                if (qCol > 12)
                {
                    qCol = qCol - 1;
                }
                else
                {
                    cmdRight.Enabled = false;
                    break;
                }
                cmdLeft.Enabled = true;
            }
        }

        private void Starta_Tick(object sender, EventArgs e)
        {
            Starta.Enabled = false;
            for (int qCol = 13; qCol < listaCompa.Columns.Count; qCol++)
            {
                listaCompa.Columns[qCol].Visible = true;
                titProd[qCol - 13].Visible = true;
            }
            listaCompa.Rows.Clear();
            menuMêsMais.Visible = false;
            menuMêsMenos.Visible = false;
            menuPrint.Visible = false;
            menuProgrBar.Visible = true;
            this.Refresh();
            Monta_Dados();
        }

        private void menuPrint_Click(object sender, EventArgs e)
        {
            qtItens = listaCompa.Rows.Count;
            qRow = 0;
            PrintDocument docto = new PrintDocument();
            PaperSize tam_A4 = new PaperSize("tam_A4", 850, 1150);
            docto.DefaultPageSettings.PaperSize = tam_A4;
            docto.PrintPage += new PrintPageEventHandler(this.Docto_PrintPage);
            docto.Print();
        }

        private void Docto_PrintPage(object sender, PrintPageEventArgs ev)
        {
            Pen myPen = new Pen(Brushes.Black);
            Font myFont1 = new Font("Arial", 14);
            Font myFont2 = new Font("Lucida Console", 8);
            Font myFont3 = new Font("Lucida Sans", 10, FontStyle.Underline);
            Font myFont4 = new Font("Lucida Sans", 8);
            ev.Graphics.DrawLine(myPen, 30, 33, 780, 33);
            string loja = "Parque das Águas Quentes";
            ev.Graphics.DrawString(loja, myFont1, Brushes.Black, 30, 10);
            ev.Graphics.DrawString("Comparativo Ações x Retiradas", myFont1, Brushes.Black, 320, 10);
            ev.Graphics.DrawString(menuMêsAno.Text, myFont1, Brushes.Black, 640, 10);
            ev.Graphics.DrawString("Bloco", myFont3, Brushes.Black, 195, 40);
            int xPos = 260;
            for (int qRow = 0; qRow < 7; qRow++)
            {
                ev.Graphics.DrawString(listaCompa.Rows[qRow].Cells[1].Value.ToString(), myFont3, Brushes.Black, xPos, 40);
                xPos = xPos + 65;
            }
            xPos = xPos + 16;
            ev.Graphics.DrawString("total", myFont3, Brushes.Black, xPos, 40);
            ev.Graphics.DrawString(" Ações ", myFont3, Brushes.Black, 30, 60);
            int yPos = 76;
            string[] titAções = new string[6] { menuAções1.Text, menuAções2.Text, menuAções3.Text,
                menuAções4.Text, menuAções5.Text, menuAções6.Text };
            for (int qCol = 0; qCol < 6; qCol++)
            {
                string edita = titAções[qCol];
                edita = edita.PadLeft(23);
                ev.Graphics.DrawString(edita, myFont2, Brushes.Black, 70, yPos);
                xPos = 270;
                for (int rw = 0; rw < 8; rw++)
                {
                    edita = listaCompa.Rows[rw].Cells[qCol + 2].Value.ToString();
                    edita = edita.PadLeft(5);
                    ev.Graphics.DrawString(edita, myFont2, Brushes.Black, xPos, yPos);
                    xPos = xPos + 65;
                }
                yPos = yPos + 16;
            }
            ev.Graphics.DrawLine(myPen, 30, yPos, 780, yPos);
            yPos = yPos + 6;
            ev.Graphics.DrawString(" Reposições ", myFont3, Brushes.Black, 30, yPos);
            yPos = yPos + 16;
            string[] titRepos = new string[3] { menuRepos1.Text, menuRepos2.Text, menuRepos3.Text };
            for (int qCol = 0; qCol < 3; qCol++)
            {
                string edita = titRepos[qCol];
                edita = edita.PadLeft(23);
                ev.Graphics.DrawString(edita, myFont2, Brushes.Black, 70, yPos);
                xPos = 270;
                for (int rw = 0; rw < 8; rw++)
                {
                    edita = listaCompa.Rows[rw].Cells[qCol + 9].Value.ToString();
                    edita = edita.PadLeft(5);
                    ev.Graphics.DrawString(edita, myFont2, Brushes.Black, xPos, yPos);
                    xPos = xPos + 65;
                }
                yPos = yPos + 16;
            }
            ev.Graphics.DrawLine(myPen, 30, yPos, 780, yPos);
            yPos = yPos + 6;
            ev.Graphics.DrawString(" Retiradas ", myFont3, Brushes.Black, 30, yPos);
            yPos = yPos + 16;
            int qTit = 0;
            for (int qCol = 13; qCol < listaCompa.Columns.Count; qCol++)
            {
                int rw = listaCompa.Rows.Count - 1; /*Alterado por rogerio valor antigo 1*/
                if (listaCompa.Rows[rw].Cells[qCol].Value.ToString() != "0")
                {
                    string edita = titProd[qTit].Text;
                    edita = edita.PadLeft(22);
                    ev.Graphics.DrawString(edita, myFont2, Brushes.Black, 75, yPos);
                    xPos = 270;
                    for (rw = 0; rw < 8; rw++)
                    {
                        edita = listaCompa.Rows[rw].Cells[qCol].Value.ToString();
                        edita = edita.PadLeft(5);
                        ev.Graphics.DrawString(edita, myFont2, Brushes.Black, xPos, yPos);
                        xPos = xPos + 65;
                    }
                    yPos = yPos + 16;
                }
                qTit = qTit + 1;
            }
            ev.Graphics.DrawLine(myPen, 30, 33, 30, yPos);
            ev.Graphics.DrawLine(myPen, 780, 33, 780, yPos);
            ev.Graphics.DrawLine(myPen, 30, yPos, 780, yPos);
            xPos = 250;
            for (int qCol = 0; qCol < 8; qCol++)
            {
                ev.Graphics.DrawLine(myPen, xPos, 33, xPos, yPos);
                xPos = xPos + 65;
            }
            ev.HasMorePages = false;
        }
    }
}
